package com.laijiale.util;

import com.alibaba.excel.EasyExcel;
import lombok.SneakyThrows;

import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Collection;

/**
 * @author laijiale
 * @date 2024年07月24日 16:47
 */

public class EasyExcelUtil {
    /**
     * 生成Excel报表并自动下载
     *
     * @param resp      HTTP响应对象
     * @param fileName  Excel文件名
     * @param sheetName Excel表格页标题
     * @param c         数据泛型类型
     * @param data      数据
     */
    @SneakyThrows
    public static void download(HttpServletResponse resp,
                                String fileName,
                                String sheetName,
                                Class<?> c,
                                Collection<?> data) {
        // 对文件名重新编码，以避免文件名中文乱码问题
        fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
        sheetName = URLEncoder.encode(sheetName, StandardCharsets.UTF_8);
        // 设置响应MIME类型为Excel文件下载类型
        resp.setContentType("application/vnd.openxmlformats-officedocument" +
                ".spreadsheetml.sheet;charset=utf-8");
        // 设置以附件的形式下载文件
        resp.setHeader("Content-disposition", "attachment;filename=" + fileName);
        // 生成Excel报表并自动下载
        EasyExcel.write(resp.getOutputStream(), c).sheet(sheetName).doWrite(data);
    }
}
